#ifndef RAY_HPP
#define RAY_HPP

#include "Eigen"

class Ray
{
private:
    // 射线的起点和方向，方向应当是标准化的
    Eigen::Vector3f orig, dir;
    
public:
    Ray() {}
    Ray(const Eigen::Vector3f& Origin, const Eigen::Vector3f& Dir) :
        orig(Origin), dir(Dir) {}
    Eigen::Vector3f& origin() { return orig; }
    const Eigen::Vector3f& origin() const { return orig; }
    
    Eigen::Vector3f& direction() { return dir; }
    const Eigen::Vector3f& direction() const { return dir; }
    
    Eigen::Vector3f at(float t)const {
        return orig + t * dir;
    }
    ~Ray(){}
};

#endif